home *** CD-ROM | disk | FTP | other *** search
/ Gekkan Dennou Club 147 / Gekkan Dennou Club - 2000.8 Vol. 147 (Japan).7z / Gekkan Dennou Club - 2000.8 Vol. 147 (Japan) (Track 1).bin / tools / rb / jlcd100.lzh / JLCD / SAMP / JLCDCON1.s < prev    next >
Text File  |  1997-12-28  |  9KB  |  507 lines

  1.     .include    tnb.mac
  2.     .include    iocscall.mac
  3.     .include    doscall.mac
  4.     .include    JLCDCALL.mac
  5.  
  6. HEAD1 = '*JLD'
  7. HEAD2 = 'OS00'
  8.  
  9.  
  10. StartStatio:*******************常駐部
  11. SS:
  12.  
  13. head:
  14.     .dc.l    HEAD1
  15.     .dc.l    HEAD2
  16.     .even
  17.  
  18. PUTCHAR:
  19.     *=========================================
  20.     *    ($ff02)[$1808]
  21.     *
  22.     move.l    d0,-(sp)
  23.     move.w    (a6),d0
  24.     bsr    JLCDV
  25.     move.l    (sp)+,d0
  26. PUTCHAR_JMP:
  27.     move.l    PUTCHAR_JPT(pc),-(sp)
  28.     rts
  29. PUTCHAR_JPT:
  30.     .dc.l    0
  31.  
  32.  
  33. PRINT:
  34.     *=========================================
  35.     *    ($ff09)[$1824]
  36.     *
  37.     movem.l    d0/a1,-(sp)
  38.     move.l    (a6),a1
  39.     moveq    #0,d0
  40.     move.b    (a1),d0
  41.     bsr    JLCDV
  42.     movem.l    (sp)+,d0/a1
  43. PRINT_JMP:
  44.     move.l    PRINT_JPT(pc),-(sp)
  45.     rts
  46. PRINT_JPT:
  47.     .dc.l    0
  48.  
  49. FPUTC:
  50.     *=========================================
  51.     *    ($ff1d)[$0114]
  52.     *
  53.     move.l    d0,-(sp)
  54.     move.w    (a6),d0
  55.     bne    @f
  56.     move.w    2(a6),d0
  57.     bsr    JLCDV
  58. @@:    move.l    (sp)+,d0
  59. FPUTC_JMP:
  60.     move.l    FPUTC_JPT(pc),-(sp)
  61.     rts
  62. FPUTC_JPT:
  63.     .dc.l    0
  64.  
  65. FPUTS:
  66.     *=========================================
  67.     *    ($ff09)[$0114]
  68.     *
  69.     movem.l    d0/a1,-(sp)
  70.     move.w    (a6),d0
  71.     bne    @f
  72.     move.l    2(a6),a1
  73.     moveq    #0,d0
  74.     move.b    (a1),d0
  75.     bsr    JLCDV
  76. @@:    movem.l    (sp)+,d0/a1
  77. FPUTS_JMP:
  78.     move.l    FPUTS_JPT(pc),-(sp)
  79.     rts
  80. FPUTS_JPT:
  81.     .dc.l    0
  82.  
  83.  
  84.     *===================================================
  85.     *in d0 文字コード
  86.     *
  87.     *
  88. JLCDV:
  89.     movem.l    d1-d3/a1,-(sp)
  90.     move.b    d0,JLCDV_ST
  91.     cmpi.w    #$0100,d0
  92.     bcc    2f
  93.     move.b    d0,d1
  94.     andi.b    #$E0,d1
  95.     beq    2f
  96.     cmpi.b    #$80,d1
  97.     beq    2f
  98.     cmpi.b    #$E0,d1
  99.     bne    1f
  100. 2:    *---- 表示出来ない文字
  101.     subq.w    #1,JLCDV_ZF
  102.     bmi    @f
  103.     move.b    #'*',JLCDV_ST
  104.     bra    1f
  105. @@:    move.b    #'#',JLCDV_ST
  106.     move.w    #3,JLCDV_ZF
  107. 1:
  108.     *----
  109. *    moveq    #-1,d2            * チェック
  110. *    JLCD    _JLCD_INIT
  111. *    tst.l    d0
  112. *    bne    9f            * 他のアプリが占領
  113.     *----
  114.     moveq    #$43,d2            * (3,1)
  115.     *moveq    #1,d2            * (1,0)
  116.     moveq    #0,d3
  117.     lea    JLCDV_ST,a1
  118.     JLCD    _JLCD_PRINT2
  119. 9:
  120.     movem.l    (sp)+,d1-d3/a1
  121.     rts
  122.  
  123.  
  124. JLCDV_ZF:
  125.     .dc.w    2
  126.  
  127. JLCDV_ST:
  128.     .dc.b    0,0
  129.     .even
  130.  
  131.  
  132. EndStatio:*******************常駐部
  133.  
  134.  
  135. MarkerChk:*----------------------------------------
  136.     *    a0 アドレス
  137.     *
  138.     *[戻り値] bne ちがう
  139.     *      beq あっている
  140.     cmpa.l    #$F0000000,a0
  141.     bcc    @f
  142.     cmp.l    #HEAD1,(a0)
  143.     bne    @f
  144.     cmp.l    #HEAD2,4(a0)
  145.     bne    @f
  146.     cmpa.l    a0,a0        *z=1
  147. @@:
  148.     rts
  149.  
  150.  
  151. InvChk:*----------------------------------------
  152.     *    a0.l==なら非常駐
  153.     *    a0.l!=なら常駐
  154.     movea.l    (a0),a0            *一つ前のポインタ
  155.     cmpa.l    #$F0000000,a0
  156.     bcc    IC1
  157.     cmp.l    #HEAD1,$0100+(head-SS)(a0)
  158.     bne    @f
  159.     cmp.l    #HEAD2,$0104+(head-SS)(a0)
  160.     bne    @f
  161.     adda.l    #$100,a0    **[SS]のポインタ
  162.     rts
  163. @@:                    **違う
  164.     tst.l    (a0)            *一つ前のポインタ
  165.     bne    InvChk            *0でない(上へ)
  166. IC1:    sub.l    a0,a0    *非常駐
  167.     rts
  168.  
  169.  
  170. AtoI:*----------------------------------------
  171.     *    a2 アドレス
  172.     *[戻り値] d0.l 数字
  173.     moveq    #0,d0
  174.     move.b    (a2),d2
  175.     cmpi.b    #'$',d2
  176.     jbeq    AtoHI
  177. @@:    move.b    (a2)+,d2
  178.     subi.b    #'0',d2
  179.     jbcs    AIr
  180.     cmpi.b    #9,d2
  181.     jbhi    AIr
  182.     andi.l    #$0000FF,d2
  183.     mulu    #10,d0
  184.     add.l    d2,d0
  185.     jbra    @b
  186. AIr:    subq    #1,a2
  187.     rts
  188. AtoHI:
  189.     *(Hex専用)
  190.     move.b    (a2)+,d2    *$ skip
  191. @@:    move.b    (a2)+,d2
  192.     subi.b    #'0',d2
  193.     jbcs    AHIL1
  194.     cmpi.b    #9,d2
  195.     jbhi    AHIL1
  196.     lsl.l    #4,d0
  197.     add.l    d2,d0
  198.     jbra    @b
  199. AHIL1:
  200.     ori.b    #$20,d2
  201.     subi.b    #'a'-'0',d2
  202.     jbcs    AHIL2
  203.     cmpi.b    #5,d2
  204.     jbhi    AHIL2
  205.     lsl.l    #4,d0
  206.     addi.l    #10,d0
  207.     add.l    d2,d0
  208.     jbra    @b
  209. AHIL2:    subq    #1,a2
  210.     rts
  211.  
  212.  
  213. clcf:    .dc.w    0
  214. cmdlinchk:*------------------------------------------------------------------
  215.     *    in a2 = 文字列
  216.     *    out d0.b    0   ; OK
  217.     *            -1  ; LINEERR
  218.     *            -2  ; COMDERR
  219.     *            -100; その他
  220.     *            'h' ; -?
  221.     *            'h' ; -H
  222.     *            'r' ; -R
  223.     *
  224.     clr.w    clcf
  225.     bra    sw
  226. cmdlinchkD:    ** DEVICE エントリ用
  227.     move.w    #-1,clcf
  228. sw:    move.b    (a2)+,d0
  229.     bne    1f
  230.     *======終わり?
  231.     tst.w    clcf
  232.     bne    @f
  233.     *======COMLINE からなので終わり
  234.     moveq    #0,d0
  235.     rts
  236. @@:    *====== DEVICE
  237.     move.b    (a2),d0
  238.     bne    sw
  239.     moveq    #0,d0    * 0が連続なので終わり
  240.     rts
  241. 1:
  242.     cmpi.b    #' ',d0
  243.     beq    sw
  244.     cmpi.b    #$09,d0        *tab
  245.     beq    sw
  246.     cmpi.b    #'-',d0
  247.     beq    swc
  248.     cmpi.b    #'/',d0
  249.     beq    swc
  250. swe:    *======コマンドラインが異常
  251.     moveq    #-1,d0
  252.     rts
  253. swc:
  254.     *======スイッチ判断
  255.     move.b    (a2)+,d0
  256.     beq    swe
  257.     cmpi.b    #'?',d0
  258.     bne    @f
  259.     moveq    #'h',d0
  260.     rts
  261. @@:
  262.     ori.b    #$20,d0    *小文字化!
  263.     cmpi.b    #'r',d0
  264.     beq    clcrts
  265.     cmpi.b    #'h',d0
  266.     beq    clcrts
  267. @@:
  268.     moveq    #-2,d0
  269. clcrts:
  270.     rts
  271.  
  272.  
  273. init:*------------------------------------------------------------------
  274.     move.l    a0,ExA0
  275.     Print    LR1(pc)
  276.  
  277.     ** 常駐チェック **
  278.     suba.l    a1,a1
  279.     SUPER
  280.     movea.l    d0,a1
  281.  
  282.     moveq    #0,d1
  283.     bsr    InvChk
  284.     movea.l    a0,a3            *常駐先頭アドレス
  285.  
  286.     move.w    #_PUTCHAR,-(sp)
  287.     DOS    _INTVCG
  288.     addq.l    #2,sp
  289.     movea.l    d0,a0
  290.     suba.l    #PUTCHAR-head,a0
  291.     bsr    MarkerChk
  292.     bne    @f
  293.     bset    #0,d1
  294. @@:
  295.     move.w    #_PRINT,-(sp)
  296.     DOS    _INTVCG
  297.     addq.l    #2,sp
  298.     movea.l    d0,a0
  299.     suba.l    #PRINT-head,a0
  300.     bsr    MarkerChk
  301.     bne    @f
  302.     bset    #1,d1
  303. @@:
  304.     move.w    #_FPUTC,-(sp)
  305.     DOS    _INTVCG
  306.     addq.l    #2,sp
  307.     movea.l    d0,a0
  308.     suba.l    #FPUTC-head,a0
  309.     bsr    MarkerChk
  310.     bne    @f
  311.     bset    #2,d1
  312. @@:
  313.     move.w    #_FPUTS,-(sp)
  314.     DOS    _INTVCG
  315.     addq.l    #2,sp
  316.     movea.l    d0,a0
  317.     suba.l    #FPUTS-head,a0
  318.     bsr    MarkerChk
  319.     bne    @f
  320.     bset    #3,d1
  321. @@:
  322.                     *d1に常駐状態
  323. .if 0
  324.     ** 常駐していたらそのデータを引用 **
  325.     move.l    a3,d0
  326.     beq    conl
  327.  
  328.     lea    __COM__-SS(a3),a0
  329.     lea    __COM__,a6
  330.     move.l    #(__COM__S-__COM__)/2-1,d0
  331. @@:    move.w    (a0)+,(a6)+
  332.     dbra    d0,@b
  333. .endif
  334.  
  335. conl:
  336.     tst.b    (a2)+            *スキップ
  337.     bsr    cmdlinchk        *a2 に文字列もって bsr
  338.  
  339.     tst.b    d0
  340.     bne    1f
  341.     bra    keep
  342. 1:
  343.     cmpi.b    #-100,d0
  344.     bne    @f
  345.     DOS    _EXIT
  346. @@:
  347.     cmpi.b    #-1,d0
  348.     bne    @f
  349.     pea    LR6(pc)
  350.     bra    PE    *end
  351. @@:
  352.     cmpi.b    #'r',d0
  353.     beq    free
  354.     cmpi.b    #'h',d0
  355.     beq    help
  356.     pea    LR7(pc)            * -2 もここだ!
  357.     bra    PE    *end
  358. help:
  359.     pea    LRH(pc)
  360.     bra    PE    *end
  361.  
  362. keep:    ************************** 常駐させる
  363.     move.l    a3,d0
  364.     beq    keepL1
  365.         *既に常駐、設定変更
  366. .if 0
  367.     lea    __COM__-SS(a3),a0
  368.     lea    __COM__,a6
  369.     move.l    #(__COM__S-__COM__)/2-1,d0
  370. @@:    move.w    (a6)+,(a0)+
  371.     dbra    d0,@b
  372. .endif
  373.     move.w    MC(pc),d0
  374.     bne    @f
  375.     pea    LR5(pc)
  376.     bra    PE    *end
  377. @@:    pea    LR5_(pc)
  378.     bra    PE    *end
  379. keepL1:
  380.     *==============セット
  381.     *---- JLCD はある?
  382.     JLCD    _JLCD_VER
  383.     cmpi.w    #$4A4C,d0
  384.     beq    @f
  385.     pea    LRNJ(pc)
  386.     bra    PE    *end
  387. @@:
  388. *    *---- JLCD は時計?!
  389. *    moveq    #-1,d2            * チェック
  390. *    JLCD    _JLCD_INIT
  391. *    tst.l    d0
  392. *    beq    @f
  393. *    pea    LRNE(pc)        * アプリが使っている
  394. *    bra    PE    *end
  395. *@@:
  396.      bsr    keepdisp
  397.  
  398.     Print    LRKP(pc)
  399.     clr.w    -(sp)
  400.     move.l    #EndStatio-StartStatio,d0
  401.     move.l    d0,-(sp)
  402.     DOS    _KEEPPR
  403.  
  404. keepdisp:***************
  405.     pea    PUTCHAR
  406.      move.w    #_PUTCHAR,-(sp)
  407.      DOS    _INTVCS
  408.      addq.l    #6,sp
  409.      move.l    d0,PUTCHAR_JPT
  410.     pea    PRINT
  411.      move.w    #_PRINT,-(sp)
  412.      DOS    _INTVCS
  413.      addq.l    #6,sp
  414.      move.l    d0,PRINT_JPT
  415.     pea    FPUTC
  416.      move.w    #_FPUTC,-(sp)
  417.      DOS    _INTVCS
  418.      addq.l    #6,sp
  419.      move.l    d0,FPUTC_JPT
  420.     pea    FPUTS
  421.      move.w    #_FPUTS,-(sp)
  422.      DOS    _INTVCS
  423.      addq.l    #6,sp
  424.      move.l    d0,FPUTS_JPT
  425.     *--
  426.     rts
  427.  
  428.  
  429. free:    *****************************常駐解除
  430.     move.l    a3,d0
  431.     bne    @f
  432.     pea    LR8(pc)        **非常駐
  433.     bra    PE    *end
  434. @@:
  435.     cmpi.w    #$0f,d1
  436.     beq    @f
  437.     pea    LR4(pc)        **ベクタが占領
  438.     bra    PE    *end
  439. @@:
  440.     move.l    (PUTCHAR_JPT-SS)(a3),-(sp)
  441.      move.w    #_PUTCHAR,-(sp)
  442.      DOS    _INTVCS
  443.      addq.l    #6,sp
  444.     move.l    (PRINT_JPT-SS)(a3),-(sp)
  445.      move.w    #_PRINT,-(sp)
  446.      DOS    _INTVCS
  447.      addq.l    #6,sp
  448.     move.l    (FPUTC_JPT-SS)(a3),-(sp)
  449.      move.w    #_FPUTC,-(sp)
  450.      DOS    _INTVCS
  451.      addq.l    #6,sp
  452.     move.l    (FPUTS_JPT-SS)(a3),-(sp)
  453.      move.w    #_FPUTS,-(sp)
  454.      DOS    _INTVCS
  455.      addq.l    #6,sp
  456.     *---- JLCD を掃除
  457.     moveq    #$43,d2            * (3,1)
  458.     *moveq    #1,d2            * (1,0)
  459.     moveq    #0,d3
  460.     lea    CR_ST,a1
  461.     JLCD    _JLCD_PRINT2
  462.     *--
  463.     sub.l    #$00000F0,a3
  464.     move.l    a3,-(sp)
  465.     DOS    _MFREE
  466.     addq.l    #4,sp
  467.  
  468.     pea    LR3(pc)
  469. PE:    DOS    _PRINT
  470.     addq.l    #4,sp
  471.     DOS    _EXIT
  472.  
  473. CR_ST:
  474.     .dc.b    ' ',0
  475.     .even
  476.  
  477.     *------------------------------------------*
  478.  
  479. ExA0:    .dc.l    0
  480.  
  481. MC:    .dc.w    0    *モードをいじった
  482. LR2:    .dc.b    ' 「白窓君」に CRT 表示する文字を1文字表示します。',$0d,$0a,0
  483. LRKP:    .dc.b    ' 常駐しました。',$0d,$0a,0
  484. LR3:    .dc.b    ' 常駐解除しました。',$0d,$0a,0
  485. LR4:    .dc.b    ' ベクタが占領されています。',$0d,$0a,0
  486. LR5:    .dc.b    ' 既に常駐しています。',$0d,$0a,0
  487. LR5_:    .dc.b    ' 設定を変更しました。    ',$0d,$0a,0
  488. LR6:    .dc.b    ' コマンドラインが異常です。',$0d,$0a,0
  489. LR7:    .dc.b    ' スイッチが異常です。',$0d,$0a,0
  490. LR8:    .dc.b    ' 常駐していません。',$0d,$0a,0
  491. LRNJ:    .dc.b    ' 「白窓君」DRIVER がありません。',$0d,$0a,0
  492. LRNE:    .dc.b    ' 「白窓君」は他のアプリが占領しています。',$0d,$0a,0
  493. LRCN:    .dc.b    ' CONFIG.SYSで登録されています。',$0d,$0a
  494.     .dc.b    ' 常駐解除できません。',$0d,$0a,0
  495.     .even
  496. LRH:    .dc.b    $0d,$0a
  497.     .dc.b    '使用法:JLCDCON1.x [switch] ',$0d,$0a
  498.     .dc.b    '    /R ・・・・・・・・ 常駐解除します。',$0d,$0a
  499.     .dc.b    $0d,$0a
  500.     .dc.b    0
  501.     .even
  502. LR1:    .dc.b    'X68k 「白窓君」 CON 1文字表示 Version 1.00 Copyright 1997 TNB製作所'
  503. CRLF:    .dc.b    $0d,$0a,0
  504.     .even
  505.  
  506.     .end    init
  507.